home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / doc.lha / documentation / manual / semantics.mss < prev    next >
Text File  |  1987-06-30  |  11KB  |  228 lines

  1. @part[SEMANTICS, Root "TMAN.MSS"]    @Comment{-*-System:TMAN-*-}
  2. @chap[Syntax and semantics]
  3. @label[SemanticsChapter]
  4.     @Comment{ref: implementation chapter; syntax chapter}
  5.  
  6.  
  7. This chapter gives an overview of @Tau[] as a programming language.  It
  8. is important not to confuse the language @i[per se] with a particular
  9. body of software which implements it.  It is natural that this confusion
  10. arises, both because the language and its implementations have
  11. developed in parallel, and because this confusion is traditional
  12. among Lisp dialects (for example, Maclisp and Lisp Machine Lisp).
  13.  
  14. The @tau[] language logically comprises three distinct components:
  15. @begin[itemize]
  16. an @iix[external representation] for objects as character sequences,
  17.  
  18. a @iix[core language] @dash[] syntax and semantics for expressions, and
  19.  
  20. a @iix[standard environment] @dash[] the behavior of the objects
  21. which are values of system variables.
  22. @end[itemize]
  23.  
  24.  
  25. @section[External representation]
  26.  
  27. Like other Lisp dialects, and in contrast with most other
  28. programming languages, @Tau[] has two different kinds of syntax: the
  29. @iix[external representation] by which objects (data) are represented as a
  30. linear sequence of characters, and an @iix[expression syntax] by which
  31. these objects can be understood as programs.@index[objects]
  32. That is, the meaning of a @Tau[] program represented as characters in a file
  33. or other external storage medium must be determined in two stages:
  34. first, by mapping the characters to objects, and then by interpreting
  35. these objects as executable programs.
  36.  
  37. The external syntax of @Tau[] is very similar to that of other Lisp
  38. dialects, and is discussed in detail at appropriate places in this manual.
  39. The following gives only the most cursory description.
  40.  
  41. @dc{ Uck!!! }
  42.  
  43. Characters may be classified according to their lexical properties; the
  44. two most important distinctions are between @i[constituent] and
  45. @i[delimiter] characters, and between @i[read-macro] characters and
  46. non-read-macro characters.  Alphabetic, numeric, and some special
  47. characters (e.g. @tc[-] and @tc[$]) are constituent characters;
  48. whitespace and some special characters (e.g. left and right parenthesis) are
  49. delimiter characters.  Some special characters such as @tc[(] and @tc[']
  50. are read-macro characters; these introduce special syntactic constructs
  51. which are idiosyncratic to the particular character introducing them.
  52.  
  53. A delimited sequence of consecutive constituent characters represents
  54. either a @iixs[number] or a @iixs[symbol].  For example, @tc[255] represents
  55. the integer 255, and @tc[APPEND] and @tc[append] both represent the
  56. symbol @tc[APPEND].  Here, and throughout the manual, the term
  57. @i[symbol] is being used in a technical manner to refer a particular
  58. kind of named object (see section @ref[symbols section]).
  59.  
  60. Balanced parentheses with a sequence of (representations of) objects
  61. between them represent a list of the (represented) objects.  For
  62. example, the characters @wt[(A B (C 12) D)] represent a list of four
  63. objects, three of which are symbols, and one of which (the third one) is
  64. a list of two objects, the symbol @tc[C] and the integer 12.
  65. Parentheses which enclose no objects represent an empty list.
  66.  
  67. There are also external representations for strings and characters, as
  68. well as for some kinds of objects which are syntactically illegal
  69. as expressions (for example, vectors).  Not all objects have external
  70. representations, however.
  71.  
  72.  
  73. @section[Core language]
  74. @label[CoreLanguageSection]    @Comment{ref: objects chapter}
  75.  
  76. The core language is described in terms of a hypothetical machine
  77. (called an @iix[evaluator]) which executes @Tau[] code directly.  In
  78. practice, the existing @Tau[] implementations have (at least) two
  79. evaluators, both of which perform evaluation as a two-stage process
  80. consisting of compilation (syntactic and semantic analysis) followed by
  81. interpretation.
  82.  
  83. @iix[Evaluation] is a process whereby an object called an @i[expression]
  84. @index[expressions] (the term @i[form]@index[forms] is used synonymously
  85. with @i[expression]) is mapped to another object, called its
  86. @i[value].  Evaluation occurs in the context of a particular
  87. @i[variable environment]@index[environments]; see below.  The expression
  88. is said to @iix[yield] its value.
  89. @index[variables]
  90.  
  91. The evaluation mapping is not a purely mathematical mapping, since in
  92. some cases the evaluation of an expression may depend not only on the
  93. variable environment but on the @iix[state] of the running @Tau[]
  94. system, or on the state of the world outside it; and evaluation may
  95. cause changes in the state of system or the world, which may, in turn,
  96. affect future evaluations.  These state changes are called
  97. @iix[side-effects].
  98.  
  99. An evaluator for the core language, written in @Tau[], can be
  100. found in Appendix @ref[EvaluatorAppendix].  This program simply encodes
  101. in a formal way the evaluation process (that is, the @ix[semantics])
  102. described informally below.
  103.  
  104. The rules by which an object is evaluated are as follows:
  105.  
  106. @i[Self-evaluating literals:]@index[Literals]
  107. All numbers, strings, and characters are syntactically valid
  108. expressions which, when evaluated, yield themselves.
  109. For example,
  110. @begin[ProgramExample]
  111. -2102        @ev[]  -2102
  112. #\M          @ev[]  #\M
  113. "A string."  @ev[]  "A string."
  114. @end[ProgramExample]
  115.  
  116. The notation @qu"@i[expression] @ev[] @i[value]" means that
  117. @i[expression], when evaluated, yields @i[value].  (Note also that we are
  118. making use of the external object syntax itself as a notational device:
  119. @qu"the object @tc[-2102]" could be said more precisely as @qu"an object
  120. externally represented by the characters `@tc[-2102]'."  Just as a
  121. program should never be confused with an object which represents it, an
  122. object should never be confused with a sequence of characters
  123. which notates it.)
  124.  
  125. @i[Symbols:]@index[Symbols]
  126. As evaluable expressions, symbols are interpreted as variable
  127. references.  A
  128. symbol evaluates to its value according to the current variable
  129. environment.  For example, in an environment in which the variable
  130. @tc[DELTA] has the value @tc[15], evaluating the expression
  131. @tc[DELTA] will yield @tc[15].
  132. @index[variables]
  133.  
  134. Symbols have many uses other than as names for variables.
  135. It is important not to confuse the use of a symbol as a datum
  136. manipulated by a program with the occurrence of a symbol
  137. as a variable reference in a program.  Symbols do not have values
  138. @i[a priori]; variables only have values by virtue of the context
  139. in which they occur.
  140.  
  141. @i[Lists:]@index[Lists]
  142. Non-empty lists are classified either as @iix[calls] or as @iix[special
  143. forms].  If the first element of the list is a symbol, and the symbol is
  144. a @iix[reserved word], then the list is a special form; otherwise it is
  145. considered to be a @i[call].  @Tau[] reserved words
  146. include, for example, the symbols @tc[QUOTE], @tc[IF],
  147. and @tc[LAMBDA].  (However, see section @ref[syntax tables section].)
  148.  
  149. @i[Special forms:]@index[Special forms]
  150. The syntax and semantics of a special form are
  151. idiosyncratic to the reserved word which introduces it; descriptions of
  152. the meaning of expressions introduced by the various reserved words are
  153. therefore distributed throughout the manual.
  154.  
  155. @i[Calls:]@index[Calls]
  156. @label[CallSemantics]    @Comment{ref: object chapter, control chapter}
  157. Calls are evaluated as follows: the elements of the list (including the
  158. first) are evaluated, in no particular order.  The first must evaluate
  159. to a procedure; this procedure is @i[applied] @index[application] to the
  160. rest of the values, which are called @iix[arguments].
  161. (The verbs @i[call] and @i[invoke] mean the same as @i[apply].)
  162. @index[calling] @index[invoking]
  163.  
  164. @comment{
  165. Application is a process performed idiosyncratically to the procedure
  166. being invoked, and so the description of application is decentralized,
  167. appearing distributed throughout the manual.  For example, in the
  168. standard environment, the variable @tc[CAR] has as its value a procedure
  169. which takes the first element of a list.  The manual entry for @tc[CAR]
  170. describes what happens when this procedure is applied to an argument,
  171. and thus constitutes, in part, a description of application.  Similarly,
  172. the entry for @tc[LAMBDA] describes what happens when a procedure
  173. created by a @tc[LAMBDA]-expression is invoked.
  174. }
  175.  
  176.  
  177. @section[The standard environment]
  178. @label[StandardEnvironmentSection]    @Comment{ref: locale section}
  179.  
  180. The standard environment corresponds to what is usually known as the
  181. @qu"run-time library" in other language environments such as C or Pascal.
  182.  
  183. New variable environments may be introduced in various ways (see chapter
  184. @ref[EnvironmentsChapter]), but a @Tau[] system is obliged to supply one
  185. standard environment in which system variables are bound to system
  186. procedures and constants, as defined by this manual.  Program execution
  187. typically occurs in an environment inferior to this standard environment
  188. (see section @ref[*STANDARD-ENV*]), so that these objects are easily
  189. accessible as values of lexically apparent variables.  For example,
  190. in this standard environment, the variable @tc[CONS] has a certain
  191. procedure as its value.
  192.  
  193. For the most part, the values of system variables are procedures, and
  194. therefore the only behavior of interest is what they do when called.
  195. (See the discussion of calls, above.)  In other cases, values are objects
  196. such as numbers or symbols.
  197.  
  198. A representation of the standard environment is available as the value
  199. of @tc[*STANDARD-ENV*] (page @pageref[*STANDARD-ENV*]).
  200.  
  201.  
  202. @section[Undefined]
  203.  
  204. @label[undefined semantics section]
  205.  
  206. The term @iix[undefined] is used in two different ways in this manual.
  207. An expression may @i[yield an undefined value], in which case it yields
  208. some value, the particular value not being defined by this manual.  In
  209. such cases it is unwise to depend on this value having any particular
  210. characteristics, for example, it being null, or not a number, or
  211. whatever.  The evaluation of the expression and the creation of the
  212. undefined value are not in error; it is the use to which this value is
  213. put that may lead to problems.  Expressions yielding undefined values
  214. are generally useful only for any side-effects they cause.
  215.  
  216. On the other hand, the evaluation of an expression may @i[have an
  217. undefined effect], in which case an implementation will endeavor to
  218. signal an error condition, permitting a user to take appropriate action.
  219. For example, a call to a non-procedure, or adding two symbols together,
  220. have undefined effects.  An implementation is not @i[obliged,] however,
  221. to signal an error, and in fact it may be in the interest of efficiency
  222. to avoid the overhead of detecting circumstances under which undefined
  223. effects will happen.
  224.  
  225. The two procedures @tc[UNDEFINED-VALUE] and @tc[UNDEFINED-EFFECT]
  226. are used for expository purposes in examples throughout this manual;
  227. they are described in section @ref[UndefinedSection].
  228.